// 1. 导入express模块
const express = require('express');
// 2. 创建express服务对象
const app = express()
// 3. 设置一个中间件
    // 3.1 use不限制请求方式
    // 3.2 use省略第一个参数，不限制请求地址
    // 3.3 “/info” 开头的执行中间件

    // 中间件函数
    // 三个参数
        // 1：req
        // 2：res
        // 3：next
        
    function middleFn(req,res,next){
        console.log("中间件进入成功666");

        // 设置req中添加属性
        req.name = "laowang";

        // next 用来表示中间件执行完成 调用的函数
        next()

        // res.send('中间件');
    }

    function middleFn2(req,res,next){
        console.log("中间件进入成功888");

        // 设置req中添加属性
        req.age = "18";

        // next 用来表示中间件执行完成 调用的函数
        next()

        // res.send('中间件');
    }

    // 调用中间件函数
    // 全局执行
    // 参数只有一个中间件函数时，不限制请求方式和请求地址都会被调用
    // app.use(middleFn)

    // 局部执行
    // 参数1：设置匹配的路由 调用对应中间件
    // 参数2：中间件函数 - 
    // app.use("/info",middleFn)
    // app.use("/info",middleFn2)

    // 改写
    // app.use("/info",(req,res,next)=>{
    //     console.log("中间件进入成功");
    //     req.name = "laowang";
    //     next()
    // })


    // app.get('/',(req,res)=>{
    //      // 获取中间件生成的req属性
    //      console.log(req.name); //laowang

    //     console.log("首页进入成功");
    //     res.send('首页');
    // });

    // 根据上面配置中间件匹配
    // app.get('/info',(req,res)=>{
    //     // 获取中间件生成的req属性
    //     console.log(req.name); //laowang

    //     res.send('信息列表页')
    // })

    // 具体对应route调用中间件
    // get /post /all  第二个参数可以调用中间件函数
    app.get('/info',middleFn,middleFn2,(req,res)=>{
        // 获取中间件生成的req属性
        console.log(req.name); //laowang

        res.send('信息列表页')
    })

    
// 4. 监听一个端口号，并启动服务
app.listen(80,()=>{
    console.log("启动成功");
})